package wxpay

// 支付类型常量
const (
	TradeTypeJSAPI  = "JSAPI"  // 小程序支付
	TradeTypeNATIVE = "NATIVE" // 扫码支付
	TradeTypeAPP    = "APP"    // APP支付
	TradeTypeH5     = "H5"     // H5支付
)

// 交易状态常量
const (
	TradeStateSuccess = "SUCCESS"    // 支付成功
	TradeStateRefund  = "REFUND"     // 转入退款
	TradeStateNotpay  = "NOTPAY"     // 未支付
	TradeStateClosed  = "CLOSED"     // 已关闭
	TradeStateRevoked = "REVOKED"    // 已撤销
	TradeStatePaying  = "USERPAYING" // 支付中
)

// UnifiedOrderRequest 统一下单请求参数
type UnifiedOrderRequest struct {
	AppID          string `xml:"appid"`            // 小程序ID
	MchID          string `xml:"mch_id"`           // 商户号
	NonceStr       string `xml:"nonce_str"`        // 随机字符串
	Sign           string `xml:"sign"`             // 签名
	Body           string `xml:"body"`             // 商品描述
	OutTradeNo     string `xml:"out_trade_no"`     // 商户订单号
	TotalFee       string `xml:"total_fee"`        // 订单总金额，单位为分
	SpbillCreateIP string `xml:"spbill_create_ip"` // 终端IP
	NotifyURL      string `xml:"notify_url"`       // 通知地址
	TradeType      string `xml:"trade_type"`       // 交易类型
	OpenID         string `xml:"openid"`           // 用户标识
	Attach         string `xml:"attach"`           // 附加数据
}

// UnifiedOrderResponse 统一下单响应
type UnifiedOrderResponse struct {
	ReturnCode string `xml:"return_code"`  // 返回状态码
	ReturnMsg  string `xml:"return_msg"`   // 返回信息
	AppID      string `xml:"appid"`        // 小程序ID
	MchID      string `xml:"mch_id"`       // 商户号
	NonceStr   string `xml:"nonce_str"`    // 随机字符串
	Sign       string `xml:"sign"`         // 签名
	ResultCode string `xml:"result_code"`  // 业务结果
	ErrCode    string `xml:"err_code"`     // 错误代码
	ErrCodeDes string `xml:"err_code_des"` // 错误代码描述
	TradeType  string `xml:"trade_type"`   // 交易类型
	PrepayID   string `xml:"prepay_id"`    // 预支付交易会话标识
}

// OrderQueryRequest 订单查询请求参数
type OrderQueryRequest struct {
	AppID         string `xml:"appid"`                    // 小程序ID
	MchID         string `xml:"mch_id"`                   // 商户号
	OutTradeNo    string `xml:"out_trade_no"`             // 商户订单号
	NonceStr      string `xml:"nonce_str"`                // 随机字符串
	Sign          string `xml:"sign"`                     // 签名
	SignType      string `xml:"sign_type"`                // 签名类型
	TransactionID string `xml:"transaction_id,omitempty"` // 微信支付订单号
}

// OrderQueryResponse 订单查询响应参数
type OrderQueryResponse struct {
	ReturnCode     string `xml:"return_code"`      // 返回状态码
	ReturnMsg      string `xml:"return_msg"`       // 返回信息
	AppID          string `xml:"appid"`            // 小程序ID
	MchID          string `xml:"mch_id"`           // 商户号
	NonceStr       string `xml:"nonce_str"`        // 随机字符串
	Sign           string `xml:"sign"`             // 签名
	ResultCode     string `xml:"result_code"`      // 业务结果
	ErrCode        string `xml:"err_code"`         // 错误代码
	ErrCodeDes     string `xml:"err_code_des"`     // 错误代码描述
	TradeState     string `xml:"trade_state"`      // 交易状态
	OpenID         string `xml:"openid"`           // 用户标识
	TransactionID  string `xml:"transaction_id"`   // 微信支付订单号
	OutTradeNo     string `xml:"out_trade_no"`     // 商户订单号
	TradeStateDesc string `xml:"trade_state_desc"` // 交易状态描述
}

// RefundRequest 退款请求参数
type RefundRequest struct {
	AppID       string `xml:"appid"`         // 小程序ID
	MchID       string `xml:"mch_id"`        // 商户号
	NonceStr    string `xml:"nonce_str"`     // 随机字符串
	Sign        string `xml:"sign"`          // 签名
	SignType    string `xml:"sign_type"`     // 签名类型
	OutTradeNo  string `xml:"out_trade_no"`  // 商户订单号
	OutRefundNo string `xml:"out_refund_no"` // 商户退款单号
	TotalFee    int    `xml:"total_fee"`     // 订单总金额
	RefundFee   int    `xml:"refund_fee"`    // 退款金额
	NotifyURL   string `xml:"notify_url"`    // 退款结果通知地址
}

// RefundResponse 退款响应参数
type RefundResponse struct {
	ReturnCode    string `xml:"return_code"`    // 返回状态码
	ReturnMsg     string `xml:"return_msg"`     // 返回信息
	AppID         string `xml:"appid"`          // 小程序ID
	MchID         string `xml:"mch_id"`         // 商户号
	NonceStr      string `xml:"nonce_str"`      // 随机字符串
	Sign          string `xml:"sign"`           // 签名
	ResultCode    string `xml:"result_code"`    // 业务结果
	ErrCode       string `xml:"err_code"`       // 错误代码
	ErrCodeDes    string `xml:"err_code_des"`   // 错误代码描述
	TransactionID string `xml:"transaction_id"` // 微信支付订单号
	OutTradeNo    string `xml:"out_trade_no"`   // 商户订单号
	OutRefundNo   string `xml:"out_refund_no"`  // 商户退款单号
	RefundID      string `xml:"refund_id"`      // 微信退款单号
}

// PayNotifyRequest 支付结果通知请求
type PayNotifyRequest struct {
	ReturnCode    string `xml:"return_code"`    // 返回状态码
	ReturnMsg     string `xml:"return_msg"`     // 返回信息
	AppID         string `xml:"appid"`          // 小程序ID
	MchID         string `xml:"mch_id"`         // 商户号
	NonceStr      string `xml:"nonce_str"`      // 随机字符串
	Sign          string `xml:"sign"`           // 签名
	ResultCode    string `xml:"result_code"`    // 业务结果
	ErrCode       string `xml:"err_code"`       // 错误代码
	ErrCodeDes    string `xml:"err_code_des"`   // 错误代码描述
	OpenID        string `xml:"openid"`         // 用户标识
	IsSubscribe   string `xml:"is_subscribe"`   // 是否关注公众账号
	TradeType     string `xml:"trade_type"`     // 交易类型
	BankType      string `xml:"bank_type"`      // 付款银行
	TotalFee      int    `xml:"total_fee"`      // 订单总金额，单位为分
	FeeType       string `xml:"fee_type"`       // 货币种类
	CashFee       int    `xml:"cash_fee"`       // 现金支付金额，单位为分
	CashFeeType   string `xml:"cash_fee_type"`  // 现金支付货币类型
	TransactionID string `xml:"transaction_id"` // 微信支付订单号
	OutTradeNo    string `xml:"out_trade_no"`   // 商户订单号
	Attach        string `xml:"attach"`         // 附加数据
	TimeEnd       string `xml:"time_end"`       // 支付完成时间
}

// PayNotifyResponse 支付结果通知响应
type PayNotifyResponse struct {
	ReturnCode string `xml:"return_code"` // 返回状态码
	ReturnMsg  string `xml:"return_msg"`  // 返回信息
}
